package com.wjx.demo.`class`

open class TT(name: String, age: Int) {
    init {
        println("name $name,age $age")
    }
}

//如果子类有主构造函数， 则基类必须在主构造函数中立即初始化。
class TTT(name: String, age: Int, no: String) : TT(name, age) {
    init {
        println("no $no")
    }
}


open class A {
    constructor(name: String) {
        println("name $name")
    }
}

//子类没有主构造函数，则必须在每一个二级构造函数中用 super 关键字初始化基类，或者在代理另一个构造函数。初始化基类时，可以调用基类的不同构造方法。
class AA : A {
    constructor (name: String, age: Int) : super(name) {
        println(name + " " + age)
    }
}

open class B {
    open fun b() {
        println("b")
    }
}

interface BB {
    fun b() {
        println("bb")
    }
}

class BBB : B(), BB {
    override fun b() {
        super<B>.b()
        super<BB>.b()
    }
}

//属性重写
open class F {
    open var a = "s"
}

class FF : F() {
    override var a = "b"
}

fun main(args: Array<String>) {
    var t = TTT("zs", 10, "110")
    var a = AA("zs", 20)
    var b = BBB()
    b.b()

    var f = FF()
    println(f.a)
}